<template>
  <div class="table">
      <div class="container">
        <div class="handle-box">
            <el-input class="handle-input" v-model="select_word" size="mini" placeholder="筛选关键字"></el-input>
            <el-button type="primary" size="mini" @click="centerDialogVisible = true">添加歌单</el-button>
            <el-button type="danger" size="mini" @click="delAll">批量删除</el-button>
        </div>
      </div>
       <el-table size="mini" ref="multipleTable" border style="width:100%" height="600px" :data="data" @selection-change="handleSelectionChange">
            <el-table-column  type="selection" width="40"></el-table-column>
            <el-table-column label="歌单图片" width="110" align="center">
                <template slot-scope="scope"> 
                    <div class="songList-img">
                        <img :src="getUrl(scope.row.pic)" style="width:100%"/>
                    </div>
                    <el-upload :action="uploadUrl(scope.row.id)" :before-upload="beforeAvatorUpload" 
                        :on-success="handleAvatorSuccess">
                        <el-button size="mini">更新图片</el-button>
                    </el-upload>
                </template>
            </el-table-column>
            <el-table-column prop="title" label="标题" width="120" align="center"></el-table-column>           
            <el-table-column label="简介">
                <template slot-scope="scope">
                    <p style="height:100px;overflow:scroll">{{scope.row.introduction}}</p>
                </template>
            </el-table-column>
            <el-table-column prop="style" label="风格" width="100" align="center"></el-table-column>            
            <el-table-column label="歌曲管理" width="110" align="center">
                <template slot-scope="scope">
                   <el-button type="info" round size="mini" @click="songEdit(scope.row.id)">歌曲管理</el-button>
                </template>
            </el-table-column>
            <el-table-column label="评论" width="110" align="center">
                <template slot-scope="scope">
                    <el-button type="info" round size="mini" @click="getComment(data[scope.$index].id)">评论管理</el-button>
                </template>    
            </el-table-column> 
            <el-table-column label="操作" width="150" align="center">
              <template slot-scope="scope">
                  <el-button type="primary" round size="mini" @click="handleEdit(scope.row)">编辑</el-button>
                  <el-button size="mini" type="danger" @click="handleDelete(scope.row.id)">删除</el-button>
              </template>
            </el-table-column>        
        </el-table>

        <div class="pagenation">
            <el-pagination 
            background 
            layout="total,prev,pager,next"
            :total="tableData.length" 
            :current-page="currentPage" 
            :page-size="pageSize" 
            @current-change="handleCurrentChange" ></el-pagination>
        </div>

      <el-dialog title="添加歌单" :visible.sync="centerDialogVisible" width="400px" center>
          <el-form :model="registerForm" ref="registerForm" label-width="80px">
              <el-form-item prop="title" label="标题" size ="mini">
                <el-input v-model="registerForm.title" placeholder="歌单名"></el-input>
              </el-form-item>
              <el-form-item prop="introduction" label="简介" size ="mini">
                <el-input v-model="registerForm.introduction" placeholder="简介" type="textarea"></el-input>
              </el-form-item>     
              <el-form-item prop="style" label="风格" size ="mini">
                <el-input v-model="registerForm.style" placeholder="地区"></el-input>
              </el-form-item>   
          </el-form>
          <span slot="footer">
            <el-button type="info" size="mini" @click="centerDialogVisible = false">取消</el-button>
            <el-button type="primary" size="mini" @click="addSongList">确定</el-button>
          </span>
      </el-dialog>

      <el-dialog title="修改歌单" :visible.sync="editVisible" width="400px" center>
          <el-form :model="editForm" ref="editForm" label-width="80px">
              <el-form-item prop="title" label="标题" size ="mini">
                <el-input v-model="editForm.title" placeholder="标题"></el-input>
              </el-form-item>
              <el-form-item prop="introduction" label="简介" size ="mini">
                <el-input v-model="editForm.introduction" placeholder="简介" type="textarea"></el-input>
              </el-form-item>
              <el-form-item prop="style" label="风格" size ="mini">
                <el-input v-model="editForm.style" placeholder="风格"></el-input>
              </el-form-item>        
          </el-form>
          <span slot="footer">
            <el-button type="info" round size="mini" @click="editVisible = false">取消</el-button>
            <el-button type="primary" round size="mini" @click="editSave">确定</el-button>
          </span>
    </el-dialog>

    <el-dialog title="删除歌单" :visible.sync="delVisible" width="300px" center>     
        <div align="center">一经删除，不可恢复！请确认是否删除？</div>   
          <span slot="footer">
            <el-button type="info" size="mini" @click="delVisible = false">取消</el-button>
            <el-button type="warning" size="mini" @click="deleteRow">确定</el-button>
          </span>
    </el-dialog>
  </div>
</template>

<script>
import {getAllSongList,setSongList,updateSongList,delSongList} from "../api/index";
import {mixin} from "../mixins/index";
export default {
  mixins: [mixin],
  data(){
    return{
      centerDialogVisible: false,   //添加弹框是否显示
      editVisible: false,           //操作弹框是否显示
      delVisible: false,            //删除弹窗是否显示
      delAllVisible: false,         //批量删除弹窗是否显示
            registerForm:{      //添加框
                title: '',          
                introduction: '',
                style: '',
            },
            editForm:{      //编辑框
                title: '',          
                introduction: '',
                style: '',
            },
      tableData: [],    //el-table数据
      tempData: [],     //查询事件发生时要展示的数据你需要for循环展示的数据
      select_word: '',  //input绑定的查询关键词
      pageSize: 4,      //分页每页的大小
      currentPage: 1,   //当前页
      idx: -1,          //当前选择的歌单（单项删除）
      multipleSelection: [],    //选中了什么歌单项
    }
  },
  computed: {
    //计算当前搜索结果表里的数据
    data() {
      return this.tableData.slice((this.currentPage -1) * this.pageSize,this.currentPage * this.pageSize)
    },
  
  },
  watch: {
    //搜索框里的内容发生变化时候，搜索结果table列表的内容跟着发生变化
    select_word: function(){
      if(this.select_word == ''){
        this.tableData = this.tempData;
      }else{
        this.tableData = [];
        for(let item of this.tempData){
          if(item.title.includes(this.select_word)){
            this.tableData.push(item);
          }
        }
      }
    },
    
  },
  created(){
        this.getData();
    },
  methods: {
     //获取当前页
        handleCurrentChange(val){
            this.currentPage = val;
        } , 
     //查询所有歌单
        getData(){
            this.tempData = [];
            this.tableData = [];
            getAllSongList().then(res => {             
                this.tableData = res;
                this.tempData = res;
            })
        },
     //添加歌单
        addSongList(){          
            let params = new URLSearchParams();
            params.append('title',this.registerForm.title);
            params.append('pic','/img/songListPic/123.jpg');
            params.append('introduction',this.registerForm.introduction);
            params.append('style',this.registerForm.style);
            setSongList(params)
            .then(res => {
                if(res.code == 1){
                  this.getData();
                  this.notify("添加成功","success");
                }else{
                  this.notify("添加失败","error");
                }
            })
            .catch(err => {
                console.log(err);
            });
            this.centerDialogVisible = false;
        },
        //修改歌单，弹出编辑页面
        handleEdit(row){
          this.editVisible = true;
          this.editForm = {
            id: row.id,
            name: row.title,
            introduction: row.introduction,
            style: row.style,
          }
        },
        //保存编辑页面,修改歌单
        editSave(){
          let d = new Date(this.editForm.birth);
            let datetime = d.getFullYear()+'-'+(d.getMonth()+1)+'-'+d.getDate();
            let params = new URLSearchParams();
            params.append('id',this.editForm.id);
            params.append('title',this.editForm.title);
            params.append('introduction',this.editForm.introduction);
            params.append('style',this.editForm.style);

            updateSongList(params)
            .then(res => {
                if(res.code == 1){
                  this.getData();
                  this.notify("修改成功","success");
                }else{
                  this.notify("修改失败","error");
                }
            })
            .catch(err => {
                console.log(err);
            });
            this.editVisible = false;
        },
        //删除一条歌单
        deleteRow(){
          delSongList(this.idx)
          .then(res => {
                if(res){
                  this.getData();
                  this.notify("删除成功","success");
                }else{
                  this.notify("删除失败","error");
                }
            })
            .catch(err => {
                console.log(err);
            });
            this.delVisible = false;
        },
        //更新图片
        uploadUrl(id){
            return `${this.$store.state.HOST}/songList/updateSongListPic?id=${id}`
        },  
        //超链接跳转歌曲管理界面
        songEdit(id,name){
            this.$router.push({path:`/ListSong`,query:{id}});
        },
        //转向该歌单的评论列表
        getComment(id){
            this.$router.push({path: '/comment',query:{id}})
        }
  },
}
</script>

<style scoped>
  .handle-box{
    margin-bottom: 20px;
    display: flex;
    justify-content: flex-end;
  }
   .songList-img{
        width: 100%;
        height: 80px;
        border-radius: 5px;
        margin-bottom: 5px;
        overflow: hidden;
    }
    .handle-input{
      width: 300px;
      display: inline-block;
    }
    .pagenation{
      display: flex;
      justify-content: center;
    }
</style>